#function (submodule arg)
#    message(STATUS "ARGN: ${ARGN}")
#    while( i LESS ${argv_len})
#        list(GET ARGV ${i} argv_value)
#        message(STATUS "argv${i}: ${argv_value}")
#        math(EXPR i "${i} + 1")
#    endwhile()
#endfunction ()
function (submodule PAREN_PATH src)
#    FILE(GLOB_RECURSE ${PAREN_PATH} "*.c" "*.cc" "*.cpp" "*.h" "*.hpp")
    FILE(GLOB SUB_PATH RELATIVE ${PAREN_PATH} ${PAREN_PATH}/*)

    FOREACH(FILE_PATH ${SUB_PATH})
        STRING(REGEX REPLACE "^[a-zA-Z]+/(.+)\\..*" "\\1" FILE_NAME ${FILE_PATH})
#        STRING(REGEX REPLACE "^[a-zA-Z]..*" "\\1" FILE_NAME ${FILE_PATH})
        IF(NOT (${FILE_PATH} MATCHES "\\.[a-zA-Z]+"))
            string(CONCAT SUB_DIRECTORY "${FILE_PATH}")
        ENDIF()
    ENDFOREACH(FILE_PATH)
    set(SUB_MODULES "${SUB_DIRECTORY}" CACHE INTERNAL "The subdirectory of project")
endfunction ()